<template>
    <div>
        <van-tabs v-model="active" @click="clickTab" class="new-list" :swipe-threshold="5">
            <van-tab title="全部"></van-tab>
            <van-tab title="待付款"></van-tab>
            <van-tab title="待使用"></van-tab>
            <van-tab title="已使用"></van-tab>
        </van-tabs>
        <van-list
                v-model="loading"
                :finished="finished[active]"
                @load="onLoad"
                :immediate-check="false"
        >
            <van-cell
                    v-for="(good, key) in orderList[active]"
                    :key="key"
                    class="cell"
            >
                <div @click="toDetail(good.id)">
                    <div class="top">
                        <div class="number">
                            <svg class="icon lq" aria-hidden="true" v-if="good.type==='2'">
                                <use xlink:href="#icon-user-lq"></use>
                            </svg>
                            订单号：{{good.id}}
                        </div>
                        <div>{{good.status | orderState}}</div>
                    </div>
                    <div class="g-body">
                        <order-goods :orderGoods="good.products" :type="type"></order-goods>
                    </div>
                    <div class="total">
                        <div>数量：3</div>
                        <div>合计：298.00</div>
                    </div>
                    <div class="line"></div>
                </div>
                <order-btn :good="good" type="list"></order-btn>
            </van-cell>
        </van-list>
        <div v-if="finished[active]" class="no-more">没有更多了</div>
    </div>
</template>

<script>
    import API from '@/request/api'
    import OrderGoods from "../../../components/User/order-goods";
    import OrderBtn from "../../../components/User/orderbtn";

    export default {
        components: {OrderBtn, OrderGoods},
        data() {
            return {
                active: 0,
                loading: false,
                finished: [],
                pages: [],
                orderList: [],
                type: 1,
            };
        },
        computed: {
            status(){
                if (this.active === 0) {
                    return 10;
                } else if (this.active === 1) {
                    return 0;
                } else {
                    return this.active + 3;
                }
            }
        },
        watch: {
            // 监听具体数据变化，并做相应的处理
        },
        methods: {
            clickTab(index){
                this.active = index;
                if (this.pages[this.active] === 1) {
                    this.onLoad();
                }
            },
            toDetail(val){
                this.$router.push({
                    name: 'shopOrderDetail',
                    query: {
                        ID: val
                    }
                });
            },
            onLoad(){
                if (this.finished[this.active] === false) {
                    console.log(this.active);
                    // 异步更新数据
                    let data = {
                        status: this.status,
                        type: 3,
                        page: this.pages[this.active]
                    };
                    // this.receive = true;
                    this.request.get(API.orderList,data).then(res => {
                        this.pages[this.active]++;
                        let newData = this.orderList[this.active].concat(res.list);
                        this.$set(this.orderList,this.active,newData);
                        if (res.total_page < this.pages[this.active]) {
                            this.finished[this.active] = true;
                        }
                        this.loading = false;
                    }, () => {
                    });
                }
            }
        },
        beforeCreate() {
            // 可以在这加个loading事件，在加载实例时触发
            // 这个阶段实例的data、methods是读不到的
        },
        created() {
            // 初始化数据，如在这结束loading事件，异步ajax请求也适宜在这里调用
            // 实例创建后：这个阶段已经完成了数据观测(data observer)，属性和方法的运算， watch/event 事件回调。
            // mount挂载阶段还没开始，"el" 属性目前不可见，数据并没有在DOM元素上进行渲染
        },
        beforeMount() {
            // 相关的 render 函数首次被调用。
        },
        mounted() {
            this.orderList = new Array(5).fill([]);
            this.pages = new Array(5).fill(1);
            this.finished = new Array(5).fill(false);
            this.active = parseInt(this.$route.query.active);
            // 挂载元素，获取到DOM节点
            // el选项的DOM节点 被新创建的 vm的el 替换，并挂载到实例上去之后调用此生命周期函数。此时实例的数据在DOM节点上进行渲染
        },
        beforeUpdate() {
            // 数据更新时调用，但不进行DOM重新渲染，在数据更新时DOM没渲染前可以在这个生命函数里进行状态处理
        },
        updated() {
            //  如果对数据统一处理，在这里写上相应函数
            // 这个状态下数据更新并且DOM重新渲染，当这个生命周期函数被调用时，组件 DOM 已经更新，所以你现在可以执行依赖于 DOM 的操作。当实例每次进行数据更新时updated都会执行
        },
        beforeDestroy() {
            // 可以做一个确认停止事件的确认框
        },
        destroyed() {
            // Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，所有的事件监听器会被移除，所有的子实例也会被销毁
        }
    };

</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
    @import '~assets/main.styl'
    .van-cell{
        margin-top vw(10)
        padding 0
        .top{
            display flex
            align-items center
            justify-content space-between
            font-size word12
            color main-color
            padding cellPadding cellPadding 0
            .number{
                display flex
                align-items center
                color gray3
                .lq{
                    width vw(24)
                    height vw(24)
                    fill #F8BE43
                    margin-right titleMargin
                }
            }
        }
        .total{
            display flex
            align-items center
            justify-content space-between
            padding 0 cellPadding
        }
        .line{
            width 100vw
            height vw(1)
            background-color #f8f8f8
        }
    }
    .no-more{
        text-align center
        color gray9
        line-height vw(30)
        margin-top smallMargin
    }
</style>
